
//1254.统计封闭岛屿的数目
class Solution {
public:
    int closedIsland(vector<vector<int>>& grid) {
        int n=grid.size(),m=grid[0].size();
        int dx[]={0,0,-1,1};
        int dy[]={1,-1,0,0};
    
        int ans=0,flag=0;  //flag来存储区域是否满足条件
        function<void(int,int)> dfs=[&](int x,int y)
        {
            grid[x][y]=-1;
            for(int k=0;k<4;k++)
            {
                int a=x+dx[k],b=y+dy[k];
                if(a>=0&&a<n&&b>=0&&b<m&&grid[a][b]==0) dfs(a,b);
                else if(a<0||a>=n||b<0||b>=m) flag=0;   //区域不满足条件
            }
        };
        for(int i=1;i<n-1;i++)
        {
            for(int j=1;j<m-1;j++)
            {
                if(grid[i][j]==0)
                {
                    flag=1;
                    dfs(i,j);
                    if(flag) ans++;
                }
            }
        }
        return ans;
    }
};